/**
 * 传入的一个整数数组，比如 [1,2,3,4]
 * 加1
 * 返回 [1,2,3,5]
 * --------------------------
 * - 1234 + 1 => 4+1，返回
 * - 1239 + 1 => 9=>0，3+1，返回
 * - 9999 + 1 => 1 + 0000，返回
 */
int* plusOne(int* digits, int digitsSize, int* returnSize)
{
  // 从【后】往【前】遍历
  for(int i=digitsSize-1; i>=0 ;i--)
  {
    // 如果传入的数组，存在【某一位】 < 9，那么 +1 直接返回
    if(digits[i] < 9)
    {
      /**
       * arr[i] 都要比 9 小，所以 只需要当前位 + 1 即可，
       * 然后返回，
       * 因为所有的为，都【不会】产生【进位】
       */
      digits[i]++;
      *returnSize=digitsSize;
      return digits;
    }

    // 否则 +1 会【进位】，变为 0
    digits[i]=0;
  }

  /**
   * 2、下面是 9、99、999、9999、9.....9【进位】的逻辑
   */

  // 申请 n + 1(进位) 长度额数组的内存
  int* result=(int*)malloc(sizeof(int)*(digitsSize + 1));

  // 最【高】位【进位】赋值 1
  result[0] = 1;

  // 其他后面的【低位】赋值 0
  for(int i=1; i<(digitsSize+1); i++)
    result[i]=0;

  // 进1位，所以比传入的数组【多一位】
  *returnSize = digitsSize+1;
  return result;
}
